﻿#define  _CRT_SECURE_NO_WARNINGS  1
#define  _CRT_SECURE_NO_WARNINGS  1
#define  _CRT_SECURE_NO_WARNINGS  1
#include <stdio.h>
//设计一个小程序来判断当前机器的字节序
//int check_sys()
//{
//	int a = 1;
//	if (*(char*)&a == 1)
//		return 1;
//	else
//		return 0;
//}
//int check_sys()
//{
//	int a = 1;
//	return *(char*)&a;
//}
//int main()
//{
//	int ret= check_sys();
//	if (ret == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//	return 0;
//}

//int main()
//{
//	char a = -1;
//	//10000000 00000000 00000000 00000001 -  -1的原码
//	//11111111 11111111 11111111 11111110 -  -1的反码
//	//11111111 11111111 11111111 11111111 -  -1的补码
//	//将一个int类型的数字放到char类型里面（1个字节）会发生截断
//	//11111111 --  a   b  c
//	signed char b = -1;
//	unsigned char c = -1;
//	printf("a=%d,b=%d,c=%d", a, b, c);//-1 -1 255
//	//%d 有符号整形打印（打印的原码） -- 看数据类型
//	//a  b char类型(在VS中是signed char)  发生整型提升 -- 11111111 11111111 11111111 11111111 --补码
//	//                                                    10000000 00000000 00000000 00000000 --反码
//	//                                                    10000000 00000000 00000000 00000001 --原码
//	//a  b  -1
//	//c  00000000 00000000 00000000 11111111 --  255
//	return 0;
//}


//int main()
//{
//	char a = -128;
//	//10000000 00000000 00000000 10000000  -  -128的补码
//	//11111111 11111111 11111111 01111111  -  -128的反码
//	//11111111 11111111 11111111 10000000  -  -128的原码
//	//发生截断10000000
//	printf("%u\n", a);  //4294967168
//	//%u -- 打印无符号整数--会把你的任何数据都当成无符号数进行打印
//	//发生整形提升  --11111111 11111111 11111111 10000000   
//	return 0;
//}


//int main()
//{
//	char a = 128;
//	//00000000 00000000 00000000 100000000
//	//截断  100000000  -a
//	printf("%u\n", a); //4294967168
//	//打印无符号整数 --发生整形提升
//	//11111111 11111111 11111111 100000000
//	return 0;
//}


//char-- signed char 取值范围:-128--127
//unsigned char  取值范围--0-255
//char 1个字节 8个比特位
// 内存中
//00000001---1
//00000010---2
//00000011---3
//01000000---127
//10000000  11111111 111111111  -128
//10000001  11111110  11111111  -127
//11111110  10000001  10000010  -2
//11111111  10000000  10000001  -1
//（补码）
//int main()
//{
//	char a[1000];//字符数组
//	int i;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;   //-1 -- -128  127--1 0
//	}
//	printf("%d", strlen(a));//255  //求字符数组的大小--需要找到字符数组中的\0  --0
//	return 0;
//}


//使用unsigned char 作循环变量的提交 千万要小心 取值范围--  0--255
//unsigned char i = 0;
//int main()
//{
//	for (i = 0; i <= 255; i++) // for循环的判断条件: i<=255 恒成立 266（>255）--会发生截断--转换为（0--255）之间的数字
//	{
//		printf("hello world\n");
//	}
//	return 0;
//}


//4294967295
//#include <windows.h>
//#include <stdio.h>
//int main()
//{
//	unsigned int i;
//	for (i = 9; i >= 0; i--) //i >= 0 恒成立  
//	{
//		printf("%u\n", i);
//		//9 8 7 6 5 4 3 2 1 0 
//		//-1 100000000 00000000 00000000 00000001  //4294967295
//		//   111111111 11111111 11111111 11111110
//		//   111111111 11111111 11111111 11111111
//		Sleep(100);
//	}
//	return 0;
//}

//%#x--可以打印出十六进制的0x
#include <stdio.h>
//X86环境 ⼩端字节序 
//int main()
//{             //01000000 02000000 03000000 04000000
//	int a[4] = { 1, 2, 3, 4 };  
//	int* ptr1 = (int*)(&a + 1);   //&a int * p[4] 指针数组  int * 
//	int* ptr2 = (int*)((int)a + 1);//(int) a数组名（首元素的地址）0x11ff4034 (int)a+1 0x11ff4035（地址+1）访问后面一个字节的内容  
//	printf("%x,%x\n", ptr1[-1], *ptr2);// prt1[-1] == *(ptr1-1) 4  2000000
//	//%x  以十六进制的形式打印     0x00000004  4   0x02000000  2000000
//	printf("%#x,%#x\n", ptr1[-1], *ptr2);
//	return 0;
//}

//int main()
//{
//	int a1[4] = { 1,2,3,4 };
//	printf("%p\n", &a1[0]);
//	printf("%p\n", &a1[1]);
//	printf("%p\n", &a1[2]);
//	printf("%p\n", &a1[3]);
//	return 0;
//}